package com.ly.mpayment.core.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import net.sf.json.JSONObject;

/**
 * 解码 utf-8
 *
 * @ClassName: DecoderUtil
 * @Description: TODO
 * @date Dec 11, 2013 5:10:00 PM
 *
 */
public class StringUtils {


	public static String getUuid(){
		return UUID.randomUUID().toString().replaceAll("-", "");
	}

	public static JSONObject returnJson(String data){
		if(!StringUtils.isBlank(data)){
			try {
				JSONObject jsonObj = JsonUtils.objToJson(data);
				return jsonObj;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	/**
	 * 解码 默认utf-8
	 *
	 * @Title decodeString
	 * @Description TODO
	 * @param value
	 * @return
	 */
	public static String decodeString(String value) {
		try {
			if (!validate(value)) {
				return URLDecoder.decode(value, "utf-8");
			}

		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 验证是否为 空 （null 空字符 ）return true 如果是null "" 则返回 true
	 *
	 * @Title validateBoolean
	 * @Description TODO
	 * @param value
	 * @return
	 */
	public static boolean validate(String value) {
		if (value == null || value.equals("null") || value.equals("") || value.trim().equals("")) {
			return false;
		}
		return true;
	}

	/**
	 * 检查map中是否有指定key 并且此值不能是null , "" , "null" 其中之一 如果是其中之一则为 true
	 *
	 * @Title getMapValue
	 * @Description TODO
	 * @param json
	 * @param key
	 * @return
	 */
	public static boolean validateMap(Map<String, Object> json, String key) {
		return StringUtils.validate(json.get(key) == null ? null : json.get(key).toString());
	}

	public static boolean equals(String sessionToken, String token) {
		// TODO Auto-generated method stub
		return sessionToken.equals(token);
	}

	public static boolean isBlank(String token) {
		// TODO Auto-generated method stub
		return token == null ? true : token.equals("") ? true : token.equals("null") ? true : false;
	}

	public static boolean StringFilter(String str) throws PatternSyntaxException {
		// 只允许字母和数字
		// String regEx = "[^a-zA-Z0-9]";
		// 清除掉所有特殊字符
		String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~！@#￥%……&*（）——+|{}【】‘；：”“’。，、？]";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(str);
//		return m.replaceAll("").trim();
		return m.find();
	}


	public static String getParameters(com.alibaba.fastjson.JSONObject ht) {
		StringBuffer sb = new StringBuffer();
		for (String key : ht.keySet()) {
			sb.append(key);
			sb.append("=");
			sb.append(ht.getString(key));
			sb.append("&");
		}
		return sb.toString().substring(0, sb.toString().length() - 1);
	}

	public static String getParametersValueUrlEncode(com.alibaba.fastjson.JSONObject ht)  {
		StringBuffer sb = new StringBuffer();
		for (String key : ht.keySet()) {
			sb.append(key);
			sb.append("=");
			try {
				sb.append(URLEncoder.encode(ht.getString(key),"utf-8"));
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			sb.append("&");
		}
		return sb.toString().substring(0, sb.toString().length() - 1);
	}


	//生成16位唯一性的订单号
    public static synchronized String getBatchNO(){
        //随机生成一位整数
        int random = (int) (Math.random()*9+1);
        String valueOf = String.valueOf(random);
        //生成uuid的hashCode值
        int hashCode = UUID.randomUUID().toString().hashCode();
        //可能为负数
        if(hashCode<0){
            hashCode = -hashCode;
        }
        return  valueOf + String.format("%015d", hashCode);
    }
}
